package frsf.cidisi.exercise.tpidemia.situationCalculus.actions;

import frsf.cidisi.exercise.tpidemia.entidades.Cofre;
import frsf.cidisi.exercise.tpidemia.situationCalculus.ArqueologoEstadoEntorno;
import frsf.cidisi.exercise.tpidemia.situationCalculus.ArqueologoState;
import frsf.cidisi.faia.agent.situationcalculus.SituationCalculusAction;
import frsf.cidisi.faia.state.AgentState;
import frsf.cidisi.faia.state.EnvironmentState;

public class TomarTesoro extends SituationCalculusAction {

    public EnvironmentState execute(AgentState ast, EnvironmentState est) {
            	
        ArqueologoEstadoEntorno environmentState = (ArqueologoEstadoEntorno) est;
        ArqueologoState agState = ((ArqueologoState) ast);
        Cofre tesoroAca = new Cofre(); 
        Cofre aux = new Cofre(); 
        aux.setPeso(0);
        aux.setValor(0);
        tesoroAca = environmentState.getTesoro(agState.getPosicion()).clonarCofre();
        if(tesoroAca==null){
        	return environmentState;
        }
        if(tesoroAca.getPeso() < (450 - agState.getCapacidadOcupada())){
        	//Actualizamos el Agente
        	//agState.setPesoAcoplado(agState.getCapacidadOcupada()+tesoroAca.getPeso());
        	//agState.setValorAcoplado(agState.getValorObtenido()+tesoroAca.getValor());
                environmentState.setPesoAcoplado(agState.getCapacidadOcupada()+tesoroAca.getPeso());
                environmentState.setValorAcoplado(agState.getValorObtenido()+tesoroAca.getValor());
        	
        	//Actualizamos el entorno
        	environmentState.getTesoro().remove(agState.getPosicion());
                environmentState.getTesoro().put(agState.getPosicion(), aux);
        	
        	return environmentState;
        }
        
        return environmentState;
    }

    @Override
    public String toString() {
        return "tomartesoro";
    }
}

